Window Functions

Database Tutorials - অ্যাপাচি প্রেস্টো (Apache Presto) SQL Functions এবং Operators |
217
217

Window Functions হল SQL-এ ব্যবহৃত বিশেষ ধরনের ফাংশন যা একটি "window" বা "ভিউ" এর মধ্যে ডেটা প্রসেস করতে সক্ষম। এই ফাংশনগুলি সাধারণত ROW_NUMBER(), RANK(), LEAD(), LAG() ইত্যাদি যেমন অ্যাগ্রিগেট ফাংশনগুলির সাথে ব্যবহৃত হয়, কিন্তু এটি গ্রুপিং না করে ডেটাকে উইন্ডো ভিত্তিতে পরিচালনা করতে দেয়।

Presto-তে Window Functions ব্যবহার করে আপনি একটি নির্দিষ্ট রেঞ্জের উপর ভিত্তি করে ডেটা বিশ্লেষণ করতে পারবেন, যেমন একটি নির্দিষ্ট সময়ের মধ্যে চলমান গড়, র‌্যাঙ্কিং, শীর্ষ এবং নিচের মান খুঁজে বের করা।


Window Functions-এর গঠন

Window Functions সাধারণত দুটি প্রধান অংশে বিভক্ত:

  1. ফাংশন: এটি সেই ফাংশন যা আপনি ব্যবহার করতে চান (যেমন, ROW_NUMBER(), RANK(), LEAD(), ইত্যাদি)।
  2. এটি প্রযোজ্য হতে হবে এমন উইন্ডো (OVER Clause): উইন্ডো হল সেই অংশ যেখানে আপনি ফাংশনটি প্রয়োগ করতে চান।
SELECT column1, column2, window_function() OVER (PARTITION BY column1 ORDER BY column2)
FROM table_name;

এখানে:

  • window_function() হল ব্যবহার করা উইন্ডো ফাংশন, যেমন ROW_NUMBER(), RANK(), LEAD(), ইত্যাদি।
  • PARTITION BY হল ডেটাকে কীভাবে বিভক্ত করা হবে তা নির্দেশ করে।
  • ORDER BY হল সেই ক্রমে ডেটাকে সাজানোর জন্য নির্দেশনা দেয়, যার ওপর ভিত্তি করে উইন্ডো ফাংশন কাজ করবে।

Presto Window Functions-এর উদাহরণ

১. ROW_NUMBER()
ROW_NUMBER() ফাংশন প্রতিটি রেকর্ডকে একটি অনন্য রাঙ্ক প্রদান করে, যা তার অবস্থান অনুযায়ী সাজানো হয়।

SELECT customer_id, order_date, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date) AS order_rank
FROM orders;

এখানে:

  • PARTITION BY customer_id: প্রতিটি গ্রাহকের জন্য আলাদা আলাদা উইন্ডো তৈরি করা হচ্ছে।
  • ORDER BY order_date: অর্ডার তারিখ অনুযায়ী রেকর্ড সাজানো হচ্ছে।

ফলাফল:

  • প্রতিটি গ্রাহককে তাদের অর্ডারের একটি সুনির্দিষ্ট র্যাঙ্ক দেওয়া হবে।

২. RANK()
RANK() ফাংশন প্রতিটি রেকর্ডকে একটি র্যাঙ্ক প্রদান করে, তবে একাধিক সমান মান থাকলে তারা একই র্যাঙ্ক পায়, এবং পরবর্তী র্যাঙ্কটি লাফ দিয়ে চলে যায়।

SELECT customer_id, order_date, amount, RANK() OVER (PARTITION BY customer_id ORDER BY amount DESC) AS rank
FROM orders;

এখানে:

  • RANK() ফাংশনটি প্রতিটি গ্রাহকের জন্য অর্ডারের পরিমাণ অনুযায়ী র্যাঙ্ক প্রদান করবে, এবং যদি কোনো দুটি অর্ডারের পরিমাণ সমান থাকে, তাহলে তারা একই র্যাঙ্ক পাবে।

ফলাফল:

  • গ্রাহক অনুযায়ী অর্ডারের পরিমাণের ওপর ভিত্তি করে র্যাঙ্ক প্রদান করা হবে।

৩. LEAD() এবং LAG()
LEAD() এবং LAG() ফাংশন দুটি ব্যবহার করা হয় পেছনের বা পরের রেকর্ডের মান দেখতে।

  • LEAD(): পরবর্তী রেকর্ডের মানকে প্রাপ্ত রেকর্ডের সাথে তুলনা করতে ব্যবহৃত হয়।
  • LAG(): পূর্ববর্তী রেকর্ডের মানকে প্রাপ্ত রেকর্ডের সাথে তুলনা করতে ব্যবহৃত হয়।

LEAD() উদাহরণ:

SELECT customer_id, order_date, amount, LEAD(amount) OVER (PARTITION BY customer_id ORDER BY order_date) AS next_order_amount
FROM orders;

এখানে:

  • LEAD(amount) পরবর্তী অর্ডারের পরিমাণ দেখাবে।

LAG() উদাহরণ:

SELECT customer_id, order_date, amount, LAG(amount) OVER (PARTITION BY customer_id ORDER BY order_date) AS previous_order_amount
FROM orders;

এখানে:

  • LAG(amount) পূর্ববর্তী অর্ডারের পরিমাণ দেখাবে।

ফলাফল:

  • LEAD() এবং LAG() ব্যবহার করে আপনি প্রতিটি রেকর্ডের পরবর্তী বা পূর্ববর্তী মান দেখতে পারবেন, যা সময়ভিত্তিক বা ধারাবাহিক বিশ্লেষণের জন্য দরকারী।

৪. SUM() এবং AVG() উইন্ডো ফাংশন হিসেবে

SUM() এবং AVG() ফাংশনও উইন্ডো ফাংশন হিসেবে ব্যবহৃত হতে পারে, যেখানে একটি নির্দিষ্ট উইন্ডোর মধ্যে মোট বা গড় মান বের করা হয়।

SUM() উদাহরণ:

SELECT customer_id, order_date, amount, SUM(amount) OVER (PARTITION BY customer_id ORDER BY order_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_sum
FROM orders;

এখানে:

  • ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW নির্দেশ করে যে উইন্ডোটি বর্তমান রেকর্ড এবং এর পূর্ববর্তী সমস্ত রেকর্ডের মধ্যে থাকতে হবে।
  • SUM(amount) এর মাধ্যমে গ্রাহকের জন্য মোট অর্ডার পরিমাণ বের করা হচ্ছে।

AVG() উদাহরণ:

SELECT customer_id, order_date, amount, AVG(amount) OVER (PARTITION BY customer_id ORDER BY order_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS moving_average
FROM orders;

এখানে:

  • AVG(amount) গ্রাহকের জন্য চলমান গড় হিসাব করবে।

Window Functions এর সুবিধা

  1. ডেটা বিশ্লেষণ সহজতর করা:
    Window Functions আপনাকে কোনও গ্রুপিং ছাড়াই ডেটা রেঞ্জে বিশ্লেষণ করতে সাহায্য করে, যা ঐতিহ্যগত অ্যাগ্রিগেট ফাংশনগুলির চেয়ে বেশি নমনীয়।
  2. চলমান গড় বা র্যাঙ্কিং গণনা:
    Presto-এর Window Functions ব্যবহার করে আপনি চলমান গড়, শীর্ষ বা নীচের মান, র্যাঙ্কিং এবং অনেক ধরনের বিশ্লেষণ সহজেই করতে পারেন।
  3. ডেটার সাথে তুলনামূলক বিশ্লেষণ:
    LAG() এবং LEAD() ফাংশন ব্যবহার করে আপনি বর্তমান রেকর্ডের সাথে পূর্ববর্তী বা পরবর্তী রেকর্ডের তুলনা করতে পারেন।

সারাংশ

Presto-তে Window Functions অত্যন্ত শক্তিশালী টুল, যা SQL কোয়েরি লেখার সময় উন্নত বিশ্লেষণ করতে সহায়ক। এগুলি আপনাকে গ্রুপিং ছাড়াই চলমান গড়, র্যাঙ্কিং, এবং অতিরিক্ত ডেটা বিশ্লেষণ করতে সক্ষম করে, যা ডেটা সায়েন্স এবং ব্যবসায়িক বিশ্লেষণের জন্য খুবই উপকারী।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion
;